package com.srmt.document.factory;

import com.srmt.document.api.DocumentService;
import com.srmt.common.config.ApplicationConfig;
import com.srmt.common.config.ConfigLoader;
import com.srmt.document.feishu.FeishuDocumentService;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 文档服务工厂类
 * 用于创建DocumentService实例
 *
 * @author YourCompany
 * @since 1.0.0
 */
public class DocumentServiceFactory {

    private static final Logger logger = LoggerFactory.getLogger(DocumentServiceFactory.class);

    /**
     * 私有构造函数，防止实例化
     */
    private DocumentServiceFactory() {
    }

    /**
     * 使用默认配置文件创建服务
     *
     * @return DocumentService实例
     */
    public static DocumentService createDefault() {
        logger.info("使用配置文件中的默认配置创建文档服务");
        ApplicationConfig config = ConfigLoader.load();
        return create(config);
    }

    /**
     * 使用ApplicationConfig对象创建服务
     *
     * @param config 配置对象
     * @return DocumentService实例
     */
    public static DocumentService create(ApplicationConfig config) {
        if (config == null) {
            throw new IllegalArgumentException("配置对象不能为null");
        }

        logger.info("使用提供的配置创建文档服务");
        config.validate();

        // 根据配置决定使用哪个实现
        String platform = config.getService().getPlatform();
        if ("feishu".equalsIgnoreCase(platform)) {
            return new FeishuDocumentService(config);
        }

        // 未来可以支持其他平台
        // if ("dingtalk".equalsIgnoreCase(platform)) {
        //     return new DingTalkDocumentService(config);
        // }

        throw new UnsupportedOperationException("不支持的平台: " + platform);
    }

    /**
     * 创建配置构建器
     *
     * @return ApplicationConfigBuilder实例
     */
    public static ApplicationConfig.ApplicationConfigBuilder builder() {
        return ApplicationConfig.builder();
    }

}